package modelo;

import java.util.Arrays;
import java.util.List;

/**
 *
 * @author Marlon & Christian
 */
public class RedAdalaine {

    private final int numNeurEntrada;
    private final int numNeurSalida;
    private double[][] mPesos;
    private double factorAprendizaje;
    private double errorEsperado;
    private int normalizador;

    public RedAdalaine(int numNeurEntrada, double[][] mPesos, double factorAprendizaje, double error) {
        this.numNeurEntrada = numNeurEntrada;
        this.numNeurSalida = 1;
        this.mPesos = mPesos;
        this.factorAprendizaje = factorAprendizaje;
        this.errorEsperado = error;
        this.normalizador = 100000;
    }

    public RedAdalaine(int numNeurEntrada, double factorAprendizaje, double error) {
        this.numNeurEntrada = numNeurEntrada;
        this.numNeurSalida = 1;
        this.factorAprendizaje = factorAprendizaje;
        this.errorEsperado = error;
        this.normalizador = 100000;

        // LA MATRIZ DE PESOS ES DE DIMENSION (NUMNEURENTRADA + 1).
        // DONDE LA POSICION 0 REPRESENTA EL BIAS
        double[][] mPesos1 = new double[1][numNeurEntrada + 1];
        for (int i = 0; i < numNeurEntrada + 1; i++) {
            mPesos1[0][i] = 0.0f;
        }
        this.mPesos = mPesos1;
    }

    public List<Double> getFilaPesos(int i) {
        Double[] nuevo = new Double[mPesos[i].length];
        //System.arraycopy(mPesos[i], 0, nuevo, 0, mPesos[i].length);

        for (int j = 0; j < mPesos[i].length; j++) {
            nuevo[j] = mPesos[i][j];
        }
        return Arrays.asList(nuevo);
    }

    public void setPeso(int i, int j, double valor) {
        mPesos[i][j] = valor;
    }

    public double getPeso(int i, int j) {
        return mPesos[i][j];
    }

    public double getFactorAprendizaje() {
        return factorAprendizaje;
    }

    public void setFactorAprendizaje(double factorAprendizaje) {
        this.factorAprendizaje = factorAprendizaje;
    }

    public double[][] getmPesos() {
        return mPesos;
    }

    public void setmPesos(double[][] mPesos) {
        this.mPesos = mPesos;
    }

    public int getNumNeurEntrada() {
        return numNeurEntrada;
    }

    public int getNumNeurSalida() {
        return numNeurSalida;
    }

    public double getErrorEsperado() {
        return errorEsperado;
    }

    public void setErrorEsperado(double error) {
        this.errorEsperado = error;
    }

    public void mostrarPesos() {
        for (int i = 0; i < mPesos.length; i++) {
            for (int j = 0; j < mPesos[i].length; j++) {
                System.out.printf("%.2f  ", mPesos[i][j]);
            }
            System.out.println("");
        }
    }

    public int getNormalizador() {
        return normalizador;
    }

    public void setNormalizador(int normalizador) {
        this.normalizador = normalizador;
    }
}
